# HG changeset patch
# User iuc
# Date 1761292240 0
# Node ID e237edee9a5398c4b74b863896d0377197ab2aa4
# Parent  93fdd696c281b71bfad5e2e2aed0d01fe52b98e1
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/jbrowse2 commit 5482aa86f906615d9bddcc32cfbc2d45b24e6345
diff -r 93fdd696c281 -r e237edee9a53 jbrowse2.py
--- a/jbrowse2.py	Thu Oct 02 10:20:29 2025 +0000
+++ b/jbrowse2.py	Fri Oct 24 07:50:40 2025 +0000
@@ -31,7 +31,9 @@
     "}": "__cc__",
     "@": "__at__",
     "#": "__pd__",
-    "": "__cn__",
+    "\n": "__cn__",
+    "\r": "__cr__",
+    "\t": "__tc__",
 }
 
 
@@ -62,6 +64,14 @@
 INSTALLED_TO = os.path.dirname(os.path.realpath(__file__))
 
 
+def unsanitize(input):
+
+    for key, value in mapped_chars.items():
+        input = input.replace(value, key)
+
+    return input
+
+
 def metadata_from_node(node):
     metadata = {}
 
@@ -74,7 +84,7 @@
             metadata[f"history_{key}"] = value
 
         for key, value in node.findall("metadata")[0].attrib.items():
-            metadata[f"metadata_{key}"] = value
+            metadata[f"metadata_{key}"] = unsanitize(value)
 
         for key, value in node.findall("tool")[0].attrib.items():
             metadata[f"tool_{key}"] = value
@@ -265,15 +275,11 @@
         }
 
         if "feature" in xml_conf["formatdetails"]:
-            feat_jexl = xml_conf["formatdetails"]["feature"]
-            for key, value in mapped_chars.items():
-                feat_jexl = feat_jexl.replace(value, key)
+            feat_jexl = unsanitize(xml_conf["formatdetails"]["feature"])
             formatDetails["feature"] = feat_jexl
 
         if "subfeature" in xml_conf["formatdetails"]:
-            sfeat_jexl = xml_conf["formatdetails"]["subfeature"]
-            for key, value in mapped_chars.items():
-                sfeat_jexl = sfeat_jexl.replace(value, key)
+            sfeat_jexl = unsanitize(xml_conf["formatdetails"]["subfeature"])
             formatDetails["subfeatures"] = sfeat_jexl
 
         if "depth" in xml_conf["formatdetails"]:
@@ -773,6 +779,54 @@
             remote=trackData['remote']
         )
 
+    def add_gtf(self, parent, data, format, trackData, gffOpts, **kwargs):
+        # Not a super recommended format
+        # https://github.com/GMOD/jbrowse-components/pull/2389
+        # https://github.com/GMOD/jbrowse-components/issues/3876
+        if trackData['remote']:
+            rel_dest = data
+        else:
+            rel_dest = os.path.join("data", trackData["label"] + ".gtf")
+            dest = os.path.join(self.outdir, rel_dest)
+            shutil.copy(os.path.realpath(data), dest)
+
+        json_track_data = {
+            "type": "FeatureTrack",
+            "trackId": trackData["label"],
+            "name": trackData["key"],
+            "adapter": {
+                "type": "GtfAdapter",
+                "gtfLocation": {
+                    "uri": rel_dest,
+                    "locationType": "UriLocation"
+                },
+            },
+            "category": [trackData["category"]],
+            "assemblyNames": [parent['uniq_id']],
+        }
+
+        style_json = self._prepare_track_style(trackData)
+
+        formatdetails = self._prepare_format_details(trackData)
+
+        style_json.update(formatdetails)
+
+        track_metadata = self._prepare_track_metadata(trackData)
+
+        style_json.update(track_metadata)
+
+        json_track_data.update(style_json)
+
+        self.subprocess_check_call(
+            [
+                "jbrowse",
+                "add-track-json",
+                "--target",
+                self.outdir,
+                json.dumps(json_track_data),
+            ]
+        )
+
     def add_bed(self, parent, data, format, trackData, gffOpts, **kwargs):
         if trackData['remote']:
             rel_dest = data
@@ -1115,8 +1169,7 @@
             extra_metadata,
         ) in enumerate(track["trackfiles"]):
             # Unsanitize labels (element_identifiers are always sanitized by Galaxy)
-            for key, value in mapped_chars.items():
-                track_human_label = track_human_label.replace(value, key)
+            track_human_label = unsanitize(track_human_label)
 
             is_multi = type(dataset_path) is list
 
@@ -1180,6 +1233,14 @@
                     outputTrackConfig,
                     track["conf"]["options"]["gff"],
                 )
+            elif dataset_ext in ("gtf"):
+                self.add_gtf(
+                    parent,
+                    dataset_path,
+                    dataset_ext,
+                    outputTrackConfig,
+                    track["conf"]["options"]["gff"],
+                )
             elif dataset_ext == "bed":
                 self.add_bed(
                     parent,
@@ -1288,13 +1349,10 @@
                     track["conf"]["options"]["hic"]
                 )
             elif dataset_ext == "sparql":
-                sparql_query = track["conf"]["options"]["sparql"]["query"]
-                for key, value in mapped_chars.items():
-                    sparql_query = sparql_query.replace(value, key)
+                sparql_query = unsanitize(track["conf"]["options"]["sparql"]["query"])
                 sparql_query_refnames = track["conf"]["options"]["sparql"].get("query_refnames", "")
                 if sparql_query_refnames:
-                    for key, value in mapped_chars.items():
-                        sparql_query_refnames = sparql_query_refnames.replace(value, key)
+                    sparql_query_refnames = unsanitize(sparql_query_refnames)
                 self.add_sparql(
                     parent,
                     track["conf"]["options"]["sparql"]["url"],
@@ -1308,7 +1366,7 @@
                     outputTrackConfig,
                 )
             else:
-                log.error(f"Do not know how to handle {dataset_ext}")
+                raise RuntimeError(f"Do not know how to handle dataset of type '{dataset_ext}'")
 
             track_labels.append(outputTrackConfig["label"])
 
@@ -1710,7 +1768,8 @@
 
             track_labels = jc.process_annotations(track_conf, genome)
 
-            if track.attrib["visibility"] == "default_on":
+            if track.attrib["visibility"] == "default_on" and \
+               (track_conf["format"] != "synteny" or track_conf["style"]["display"] != "LinearSyntenyDisplay"):
                 for tlabel in track_labels:
                     default_tracks_on.append(tlabel)
 
diff -r 93fdd696c281 -r e237edee9a53 jbrowse2.xml
--- a/jbrowse2.xml	Thu Oct 02 10:20:29 2025 +0000
+++ b/jbrowse2.xml	Fri Oct 24 07:50:40 2025 +0000
@@ -85,7 +85,7 @@
                     display_name="Unnamed History"/>
                     #end if
                 
                             #end if
                         
         
 
-        
+        
         
             
                 
@@ -348,19 +352,21 @@
              https://github.com/GMOD/jbrowse-components/issues/1765
         -->
 
-        
+        
+            '^[a-zA-Z0-9_]:\d+\.\.\d+$'
+        
 
         
 
         
 
-        
-            
+            
-            
+                help="You can use #date# and it will be replaced with the current date in 'yyyy-mm-dd' format, which is very useful for repeatedly updating a JBrowse instance when member databases / underlying tool versions are updated." optional="False"/>
+            
                 
                     
                         
@@ -375,7 +381,7 @@
                         
                     
                     
-                        
+                        
 
                         
 
@@ -512,6 +518,15 @@
                     
                     
                         
+                            
+                            
+                                
+                                
+                            
+                        
+                    
+                    
+                        
                             
                             
                                 
@@ -593,8 +608,12 @@
                 
             
             
         
          
@@ -703,8 +722,17 @@
                 
             
             
         
          
@@ -721,6 +749,11 @@
                                 
                                 
                             
+                            
                         
                     
                 
@@ -738,6 +771,11 @@
                                 
                                 
                             
+                            
                         
                     
                 
@@ -760,8 +798,12 @@
                 
             
             
         
          
@@ -779,6 +821,11 @@
                                 
                                 
                             
+                            
                         
                     
                 
@@ -791,8 +838,12 @@
                 
             
             
         
          
@@ -811,6 +862,11 @@
                                 
                                 
                             
+                            
                         
                     
                 
@@ -823,8 +879,12 @@
                 
             
             
         
          
@@ -891,8 +951,12 @@
                 
             
             
         
          
@@ -909,6 +973,11 @@
                                 
                                 
                             
+                            
                         
                     
                     
@@ -940,6 +1009,11 @@
                                 
                                 
                             
+                            
                         
                     
                     
@@ -976,8 +1050,12 @@
                 
             
             
         
     
@@ -1016,15 +1094,15 @@
 To add an assembly, you will need to input its sequence, either from a FASTA file in your history
 or from a genome pre-installed by your server administrators.
 
-### Track Groups
+### Track Categories
 
-Track groups represent a set of tracks in a single category. These
+Track Categories represent a set of related tracks. These
 can be used to let your users understand relationships between large
 groups of tracks.
 
-### Annotation Tracks
+### Tracks
 
-Within Track Groups, you have one or more **Annotation Tracks**. Each
+Within Track Categories, you have one or more **Tracks**. Each
 Annotation Track is a dataset, or a group of datasets which have similar styling.
 This allows you to rapidly build up JBrowse instances without having to
 configure tracks individually. For example, if you have five different GFF3 files from
diff -r 93fdd696c281 -r e237edee9a53 macros.xml
--- a/macros.xml	Thu Oct 02 10:20:29 2025 +0000
+++ b/macros.xml	Fri Oct 24 07:50:40 2025 +0000
@@ -11,7 +11,7 @@
             
         
     
-    0
+    1
 
     
         
@@ -223,7 +223,7 @@
             
                 
                     
-                    
+                    
                 
                 
                 
diff -r 93fdd696c281 -r e237edee9a53 test-data/gtf/merlin.gtf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/gtf/merlin.gtf	Fri Oct 24 07:50:40 2025 +0000
@@ -0,0 +1,292 @@
+Merlin	merlin	transcript	2	691	.	+	.	transcript_id "Merlin_1_exon"; gene_id "Merlin_1_exon"
+Merlin	merlin	CDS	2	691	.	+	0	transcript_id "Merlin_1_exon";
+Merlin	merlin	transcript	2	691	.	+	.	transcript_id "Merlin_1_mRNA"; gene_id "Merlin_1"
+Merlin	merlin	exon	2	691	.	+	.	transcript_id "Merlin_1_mRNA"; gene_id "Merlin_1";
+Merlin	merlin	transcript	752	1039	.	+	.	transcript_id "Merlin_2_exon"; gene_id "Merlin_2_exon"
+Merlin	merlin	CDS	752	1039	.	+	0	transcript_id "Merlin_2_exon";
+Merlin	merlin	transcript	752	1039	.	+	.	transcript_id "Merlin_2_mRNA"; gene_id "Merlin_2"
+Merlin	merlin	exon	752	1039	.	+	.	transcript_id "Merlin_2_mRNA"; gene_id "Merlin_2";
+Merlin	merlin	transcript	1067	2011	.	-	.	transcript_id "Merlin_3_exon"; gene_id "Merlin_3_exon"
+Merlin	merlin	CDS	1067	2011	.	-	0	transcript_id "Merlin_3_exon";
+Merlin	merlin	transcript	1067	2011	.	-	.	transcript_id "Merlin_3_mRNA"; gene_id "Merlin_3"
+Merlin	merlin	exon	1067	2011	.	-	.	transcript_id "Merlin_3_mRNA"; gene_id "Merlin_3";
+Merlin	merlin	transcript	2011	3066	.	-	.	transcript_id "Merlin_4_exon"; gene_id "Merlin_4_exon"
+Merlin	merlin	CDS	2011	3066	.	-	0	transcript_id "Merlin_4_exon";
+Merlin	merlin	transcript	2011	3066	.	-	.	transcript_id "Merlin_4_mRNA"; gene_id "Merlin_4"
+Merlin	merlin	exon	2011	3066	.	-	.	transcript_id "Merlin_4_mRNA"; gene_id "Merlin_4";
+Merlin	merlin	transcript	3066	4796	.	-	.	transcript_id "Merlin_5_exon"; gene_id "Merlin_5_exon"
+Merlin	merlin	CDS	3066	4796	.	-	0	transcript_id "Merlin_5_exon";
+Merlin	merlin	transcript	3066	4796	.	-	.	transcript_id "Merlin_5_mRNA"; gene_id "Merlin_5"
+Merlin	merlin	exon	3066	4796	.	-	.	transcript_id "Merlin_5_mRNA"; gene_id "Merlin_5";
+Merlin	merlin	transcript	4793	5317	.	-	.	transcript_id "Merlin_6_exon"; gene_id "Merlin_6_exon"
+Merlin	merlin	CDS	4793	5317	.	-	0	transcript_id "Merlin_6_exon";
+Merlin	merlin	transcript	4793	5317	.	-	.	transcript_id "Merlin_6_mRNA"; gene_id "Merlin_6"
+Merlin	merlin	exon	4793	5317	.	-	.	transcript_id "Merlin_6_mRNA"; gene_id "Merlin_6";
+Merlin	merlin	transcript	5289	6431	.	-	.	transcript_id "Merlin_7_exon"; gene_id "Merlin_7_exon"
+Merlin	merlin	CDS	5289	6431	.	-	0	transcript_id "Merlin_7_exon";
+Merlin	merlin	transcript	5289	6431	.	-	.	transcript_id "Merlin_7_mRNA"; gene_id "Merlin_7"
+Merlin	merlin	exon	5289	6431	.	-	.	transcript_id "Merlin_7_mRNA"; gene_id "Merlin_7";
+Merlin	merlin	transcript	6428	7180	.	-	.	transcript_id "Merlin_8_exon"; gene_id "Merlin_8_exon"
+Merlin	merlin	CDS	6428	7180	.	-	0	transcript_id "Merlin_8_exon";
+Merlin	merlin	transcript	6428	7180	.	-	.	transcript_id "Merlin_8_mRNA"; gene_id "Merlin_8"
+Merlin	merlin	exon	6428	7180	.	-	.	transcript_id "Merlin_8_mRNA"; gene_id "Merlin_8";
+Merlin	merlin	transcript	7228	7857	.	+	.	transcript_id "Merlin_9_exon"; gene_id "Merlin_9_exon"
+Merlin	merlin	CDS	7228	7857	.	+	0	transcript_id "Merlin_9_exon";
+Merlin	merlin	transcript	7228	7857	.	+	.	transcript_id "Merlin_9_mRNA"; gene_id "Merlin_9"
+Merlin	merlin	exon	7228	7857	.	+	.	transcript_id "Merlin_9_mRNA"; gene_id "Merlin_9";
+Merlin	merlin	transcript	7857	8252	.	+	.	transcript_id "Merlin_10_exon"; gene_id "Merlin_10_exon"
+Merlin	merlin	CDS	7857	8252	.	+	0	transcript_id "Merlin_10_exon";
+Merlin	merlin	transcript	7857	8252	.	+	.	transcript_id "Merlin_10_mRNA"; gene_id "Merlin_10"
+Merlin	merlin	exon	7857	8252	.	+	.	transcript_id "Merlin_10_mRNA"; gene_id "Merlin_10";
+Merlin	merlin	transcript	8340	8753	.	+	.	transcript_id "Merlin_11_exon"; gene_id "Merlin_11_exon"
+Merlin	merlin	CDS	8340	8753	.	+	0	transcript_id "Merlin_11_exon";
+Merlin	merlin	transcript	8340	8753	.	+	.	transcript_id "Merlin_11_mRNA"; gene_id "Merlin_11"
+Merlin	merlin	exon	8340	8753	.	+	.	transcript_id "Merlin_11_mRNA"; gene_id "Merlin_11";
+Merlin	merlin	transcript	8787	8951	.	+	.	transcript_id "Merlin_12_exon"; gene_id "Merlin_12_exon"
+Merlin	merlin	CDS	8787	8951	.	+	0	transcript_id "Merlin_12_exon";
+Merlin	merlin	transcript	8787	8951	.	+	.	transcript_id "Merlin_12_mRNA"; gene_id "Merlin_12"
+Merlin	merlin	exon	8787	8951	.	+	.	transcript_id "Merlin_12_mRNA"; gene_id "Merlin_12";
+Merlin	merlin	transcript	9014	9241	.	-	.	transcript_id "Merlin_13_exon"; gene_id "Merlin_13_exon"
+Merlin	merlin	CDS	9014	9241	.	-	0	transcript_id "Merlin_13_exon";
+Merlin	merlin	transcript	9014	9241	.	-	.	transcript_id "Merlin_13_mRNA"; gene_id "Merlin_13"
+Merlin	merlin	exon	9014	9241	.	-	.	transcript_id "Merlin_13_mRNA"; gene_id "Merlin_13";
+Merlin	merlin	transcript	9248	10747	.	-	.	transcript_id "Merlin_14_exon"; gene_id "Merlin_14_exon"
+Merlin	merlin	CDS	9248	10747	.	-	0	transcript_id "Merlin_14_exon";
+Merlin	merlin	transcript	9248	10747	.	-	.	transcript_id "Merlin_14_mRNA"; gene_id "Merlin_14"
+Merlin	merlin	exon	9248	10747	.	-	.	transcript_id "Merlin_14_mRNA"; gene_id "Merlin_14";
+Merlin	merlin	transcript	10800	11435	.	+	.	transcript_id "Merlin_15_exon"; gene_id "Merlin_15_exon"
+Merlin	merlin	CDS	10800	11435	.	+	0	transcript_id "Merlin_15_exon";
+Merlin	merlin	transcript	10800	11435	.	+	.	transcript_id "Merlin_15_mRNA"; gene_id "Merlin_15"
+Merlin	merlin	exon	10800	11435	.	+	.	transcript_id "Merlin_15_mRNA"; gene_id "Merlin_15";
+Merlin	merlin	transcript	11469	12290	.	+	.	transcript_id "Merlin_16_exon"; gene_id "Merlin_16_exon"
+Merlin	merlin	CDS	11469	12290	.	+	0	transcript_id "Merlin_16_exon";
+Merlin	merlin	transcript	11469	12290	.	+	.	transcript_id "Merlin_16_mRNA"; gene_id "Merlin_16"
+Merlin	merlin	exon	11469	12290	.	+	.	transcript_id "Merlin_16_mRNA"; gene_id "Merlin_16";
+Merlin	merlin	transcript	12365	12601	.	+	.	transcript_id "Merlin_17_exon"; gene_id "Merlin_17_exon"
+Merlin	merlin	CDS	12365	12601	.	+	0	transcript_id "Merlin_17_exon";
+Merlin	merlin	transcript	12365	12601	.	+	.	transcript_id "Merlin_17_mRNA"; gene_id "Merlin_17"
+Merlin	merlin	exon	12365	12601	.	+	.	transcript_id "Merlin_17_mRNA"; gene_id "Merlin_17";
+Merlin	merlin	transcript	12598	12951	.	+	.	transcript_id "Merlin_18_exon"; gene_id "Merlin_18_exon"
+Merlin	merlin	CDS	12598	12951	.	+	0	transcript_id "Merlin_18_exon";
+Merlin	merlin	transcript	12598	12951	.	+	.	transcript_id "Merlin_18_mRNA"; gene_id "Merlin_18"
+Merlin	merlin	exon	12598	12951	.	+	.	transcript_id "Merlin_18_mRNA"; gene_id "Merlin_18";
+Merlin	merlin	transcript	13067	13330	.	+	.	transcript_id "Merlin_19_exon"; gene_id "Merlin_19_exon"
+Merlin	merlin	CDS	13067	13330	.	+	0	transcript_id "Merlin_19_exon";
+Merlin	merlin	transcript	13067	13330	.	+	.	transcript_id "Merlin_19_mRNA"; gene_id "Merlin_19"
+Merlin	merlin	exon	13067	13330	.	+	.	transcript_id "Merlin_19_mRNA"; gene_id "Merlin_19";
+Merlin	merlin	transcript	13340	14341	.	+	.	transcript_id "Merlin_20_exon"; gene_id "Merlin_20_exon"
+Merlin	merlin	CDS	13340	14341	.	+	0	transcript_id "Merlin_20_exon";
+Merlin	merlin	transcript	13340	14341	.	+	.	transcript_id "Merlin_20_mRNA"; gene_id "Merlin_20"
+Merlin	merlin	exon	13340	14341	.	+	.	transcript_id "Merlin_20_mRNA"; gene_id "Merlin_20";
+Merlin	merlin	transcript	14320	14883	.	+	.	transcript_id "Merlin_21_exon"; gene_id "Merlin_21_exon"
+Merlin	merlin	CDS	14320	14883	.	+	0	transcript_id "Merlin_21_exon";
+Merlin	merlin	transcript	14320	14883	.	+	.	transcript_id "Merlin_21_mRNA"; gene_id "Merlin_21"
+Merlin	merlin	exon	14320	14883	.	+	.	transcript_id "Merlin_21_mRNA"; gene_id "Merlin_21";
+Merlin	merlin	transcript	14911	16197	.	-	.	transcript_id "Merlin_22_exon"; gene_id "Merlin_22_exon"
+Merlin	merlin	CDS	14911	16197	.	-	0	transcript_id "Merlin_22_exon";
+Merlin	merlin	transcript	14911	16197	.	-	.	transcript_id "Merlin_22_mRNA"; gene_id "Merlin_22"
+Merlin	merlin	exon	14911	16197	.	-	.	transcript_id "Merlin_22_mRNA"; gene_id "Merlin_22";
+Merlin	merlin	transcript	16289	17836	.	-	.	transcript_id "Merlin_23_exon"; gene_id "Merlin_23_exon"
+Merlin	merlin	CDS	16289	17836	.	-	0	transcript_id "Merlin_23_exon";
+Merlin	merlin	transcript	16289	17836	.	-	.	transcript_id "Merlin_23_mRNA"; gene_id "Merlin_23"
+Merlin	merlin	exon	16289	17836	.	-	.	transcript_id "Merlin_23_mRNA"; gene_id "Merlin_23";
+Merlin	merlin	transcript	17858	18673	.	-	.	transcript_id "Merlin_24_exon"; gene_id "Merlin_24_exon"
+Merlin	merlin	CDS	17858	18673	.	-	0	transcript_id "Merlin_24_exon";
+Merlin	merlin	transcript	17858	18673	.	-	.	transcript_id "Merlin_24_mRNA"; gene_id "Merlin_24"
+Merlin	merlin	exon	17858	18673	.	-	.	transcript_id "Merlin_24_mRNA"; gene_id "Merlin_24";
+Merlin	merlin	transcript	18707	19351	.	-	.	transcript_id "Merlin_25_exon"; gene_id "Merlin_25_exon"
+Merlin	merlin	CDS	18707	19351	.	-	0	transcript_id "Merlin_25_exon";
+Merlin	merlin	transcript	18707	19351	.	-	.	transcript_id "Merlin_25_mRNA"; gene_id "Merlin_25"
+Merlin	merlin	exon	18707	19351	.	-	.	transcript_id "Merlin_25_mRNA"; gene_id "Merlin_25";
+Merlin	merlin	transcript	19351	19776	.	-	.	transcript_id "Merlin_26_exon"; gene_id "Merlin_26_exon"
+Merlin	merlin	CDS	19351	19776	.	-	0	transcript_id "Merlin_26_exon";
+Merlin	merlin	transcript	19351	19776	.	-	.	transcript_id "Merlin_26_mRNA"; gene_id "Merlin_26"
+Merlin	merlin	exon	19351	19776	.	-	.	transcript_id "Merlin_26_mRNA"; gene_id "Merlin_26";
+Merlin	merlin	transcript	19776	19988	.	-	.	transcript_id "Merlin_27_exon"; gene_id "Merlin_27_exon"
+Merlin	merlin	CDS	19776	19988	.	-	0	transcript_id "Merlin_27_exon";
+Merlin	merlin	transcript	19776	19988	.	-	.	transcript_id "Merlin_27_mRNA"; gene_id "Merlin_27"
+Merlin	merlin	exon	19776	19988	.	-	.	transcript_id "Merlin_27_mRNA"; gene_id "Merlin_27";
+Merlin	merlin	transcript	19988	21550	.	-	.	transcript_id "Merlin_28_exon"; gene_id "Merlin_28_exon"
+Merlin	merlin	CDS	19988	21550	.	-	0	transcript_id "Merlin_28_exon";
+Merlin	merlin	transcript	19988	21550	.	-	.	transcript_id "Merlin_28_mRNA"; gene_id "Merlin_28"
+Merlin	merlin	exon	19988	21550	.	-	.	transcript_id "Merlin_28_mRNA"; gene_id "Merlin_28";
+Merlin	merlin	transcript	21625	22116	.	-	.	transcript_id "Merlin_29_exon"; gene_id "Merlin_29_exon"
+Merlin	merlin	CDS	21625	22116	.	-	0	transcript_id "Merlin_29_exon";
+Merlin	merlin	transcript	21625	22116	.	-	.	transcript_id "Merlin_29_mRNA"; gene_id "Merlin_29"
+Merlin	merlin	exon	21625	22116	.	-	.	transcript_id "Merlin_29_mRNA"; gene_id "Merlin_29";
+Merlin	merlin	transcript	22240	24216	.	-	.	transcript_id "Merlin_30_exon"; gene_id "Merlin_30_exon"
+Merlin	merlin	CDS	22240	24216	.	-	0	transcript_id "Merlin_30_exon";
+Merlin	merlin	transcript	22240	24216	.	-	.	transcript_id "Merlin_30_mRNA"; gene_id "Merlin_30"
+Merlin	merlin	exon	22240	24216	.	-	.	transcript_id "Merlin_30_mRNA"; gene_id "Merlin_30";
+Merlin	merlin	transcript	24250	26094	.	-	.	transcript_id "Merlin_31_exon"; gene_id "Merlin_31_exon"
+Merlin	merlin	CDS	24250	26094	.	-	0	transcript_id "Merlin_31_exon";
+Merlin	merlin	transcript	24250	26094	.	-	.	transcript_id "Merlin_31_mRNA"; gene_id "Merlin_31"
+Merlin	merlin	exon	24250	26094	.	-	.	transcript_id "Merlin_31_mRNA"; gene_id "Merlin_31";
+Merlin	merlin	transcript	26072	26569	.	-	.	transcript_id "Merlin_32_exon"; gene_id "Merlin_32_exon"
+Merlin	merlin	CDS	26072	26569	.	-	0	transcript_id "Merlin_32_exon";
+Merlin	merlin	transcript	26072	26569	.	-	.	transcript_id "Merlin_32_mRNA"; gene_id "Merlin_32"
+Merlin	merlin	exon	26072	26569	.	-	.	transcript_id "Merlin_32_mRNA"; gene_id "Merlin_32";
+Merlin	merlin	transcript	26572	27390	.	-	.	transcript_id "Merlin_33_exon"; gene_id "Merlin_33_exon"
+Merlin	merlin	CDS	26572	27390	.	-	0	transcript_id "Merlin_33_exon";
+Merlin	merlin	transcript	26572	27390	.	-	.	transcript_id "Merlin_33_mRNA"; gene_id "Merlin_33"
+Merlin	merlin	exon	26572	27390	.	-	.	transcript_id "Merlin_33_mRNA"; gene_id "Merlin_33";
+Merlin	merlin	transcript	27434	28204	.	-	.	transcript_id "Merlin_34_exon"; gene_id "Merlin_34_exon"
+Merlin	merlin	CDS	27434	28204	.	-	0	transcript_id "Merlin_34_exon";
+Merlin	merlin	transcript	27434	28204	.	-	.	transcript_id "Merlin_34_mRNA"; gene_id "Merlin_34"
+Merlin	merlin	exon	27434	28204	.	-	.	transcript_id "Merlin_34_mRNA"; gene_id "Merlin_34";
+Merlin	merlin	transcript	28201	29130	.	-	.	transcript_id "Merlin_35_exon"; gene_id "Merlin_35_exon"
+Merlin	merlin	CDS	28201	29130	.	-	0	transcript_id "Merlin_35_exon";
+Merlin	merlin	transcript	28201	29130	.	-	.	transcript_id "Merlin_35_mRNA"; gene_id "Merlin_35"
+Merlin	merlin	exon	28201	29130	.	-	.	transcript_id "Merlin_35_mRNA"; gene_id "Merlin_35";
+Merlin	merlin	transcript	29162	30553	.	-	.	transcript_id "Merlin_36_exon"; gene_id "Merlin_36_exon"
+Merlin	merlin	CDS	29162	30553	.	-	0	transcript_id "Merlin_36_exon";
+Merlin	merlin	transcript	29162	30553	.	-	.	transcript_id "Merlin_36_mRNA"; gene_id "Merlin_36"
+Merlin	merlin	exon	29162	30553	.	-	.	transcript_id "Merlin_36_mRNA"; gene_id "Merlin_36";
+Merlin	merlin	transcript	30564	31982	.	-	.	transcript_id "Merlin_37_exon"; gene_id "Merlin_37_exon"
+Merlin	merlin	CDS	30564	31982	.	-	0	transcript_id "Merlin_37_exon";
+Merlin	merlin	transcript	30564	31982	.	-	.	transcript_id "Merlin_37_mRNA"; gene_id "Merlin_37"
+Merlin	merlin	exon	30564	31982	.	-	.	transcript_id "Merlin_37_mRNA"; gene_id "Merlin_37";
+Merlin	merlin	transcript	31982	32632	.	-	.	transcript_id "Merlin_38_exon"; gene_id "Merlin_38_exon"
+Merlin	merlin	CDS	31982	32632	.	-	0	transcript_id "Merlin_38_exon";
+Merlin	merlin	transcript	31982	32632	.	-	.	transcript_id "Merlin_38_mRNA"; gene_id "Merlin_38"
+Merlin	merlin	exon	31982	32632	.	-	.	transcript_id "Merlin_38_mRNA"; gene_id "Merlin_38";
+Merlin	merlin	transcript	32632	34437	.	-	.	transcript_id "Merlin_39_exon"; gene_id "Merlin_39_exon"
+Merlin	merlin	CDS	32632	34437	.	-	0	transcript_id "Merlin_39_exon";
+Merlin	merlin	transcript	32632	34437	.	-	.	transcript_id "Merlin_39_mRNA"; gene_id "Merlin_39"
+Merlin	merlin	exon	32632	34437	.	-	.	transcript_id "Merlin_39_mRNA"; gene_id "Merlin_39";
+Merlin	merlin	transcript	34434	35300	.	-	.	transcript_id "Merlin_40_exon"; gene_id "Merlin_40_exon"
+Merlin	merlin	CDS	34434	35300	.	-	0	transcript_id "Merlin_40_exon";
+Merlin	merlin	transcript	34434	35300	.	-	.	transcript_id "Merlin_40_mRNA"; gene_id "Merlin_40"
+Merlin	merlin	exon	34434	35300	.	-	.	transcript_id "Merlin_40_mRNA"; gene_id "Merlin_40";
+Merlin	merlin	transcript	35372	36385	.	-	.	transcript_id "Merlin_41_exon"; gene_id "Merlin_41_exon"
+Merlin	merlin	CDS	35372	36385	.	-	0	transcript_id "Merlin_41_exon";
+Merlin	merlin	transcript	35372	36385	.	-	.	transcript_id "Merlin_41_mRNA"; gene_id "Merlin_41"
+Merlin	merlin	exon	35372	36385	.	-	.	transcript_id "Merlin_41_mRNA"; gene_id "Merlin_41";
+Merlin	merlin	transcript	36378	39479	.	-	.	transcript_id "Merlin_42_exon"; gene_id "Merlin_42_exon"
+Merlin	merlin	CDS	36378	39479	.	-	0	transcript_id "Merlin_42_exon";
+Merlin	merlin	transcript	36378	39479	.	-	.	transcript_id "Merlin_42_mRNA"; gene_id "Merlin_42"
+Merlin	merlin	exon	36378	39479	.	-	.	transcript_id "Merlin_42_mRNA"; gene_id "Merlin_42";
+Merlin	merlin	transcript	39476	41416	.	-	.	transcript_id "Merlin_43_exon"; gene_id "Merlin_43_exon"
+Merlin	merlin	CDS	39476	41416	.	-	0	transcript_id "Merlin_43_exon";
+Merlin	merlin	transcript	39476	41416	.	-	.	transcript_id "Merlin_43_mRNA"; gene_id "Merlin_43"
+Merlin	merlin	exon	39476	41416	.	-	.	transcript_id "Merlin_43_mRNA"; gene_id "Merlin_43";
+Merlin	merlin	transcript	41416	41709	.	-	.	transcript_id "Merlin_44_exon"; gene_id "Merlin_44_exon"
+Merlin	merlin	CDS	41416	41709	.	-	0	transcript_id "Merlin_44_exon";
+Merlin	merlin	transcript	41416	41709	.	-	.	transcript_id "Merlin_44_mRNA"; gene_id "Merlin_44"
+Merlin	merlin	exon	41416	41709	.	-	.	transcript_id "Merlin_44_mRNA"; gene_id "Merlin_44";
+Merlin	merlin	transcript	41709	42224	.	-	.	transcript_id "Merlin_45_exon"; gene_id "Merlin_45_exon"
+Merlin	merlin	CDS	41709	42224	.	-	0	transcript_id "Merlin_45_exon";
+Merlin	merlin	transcript	41709	42224	.	-	.	transcript_id "Merlin_45_mRNA"; gene_id "Merlin_45"
+Merlin	merlin	exon	41709	42224	.	-	.	transcript_id "Merlin_45_mRNA"; gene_id "Merlin_45";
+Merlin	merlin	transcript	42224	43951	.	-	.	transcript_id "Merlin_46_exon"; gene_id "Merlin_46_exon"
+Merlin	merlin	CDS	42224	43951	.	-	0	transcript_id "Merlin_46_exon";
+Merlin	merlin	transcript	42224	43951	.	-	.	transcript_id "Merlin_46_mRNA"; gene_id "Merlin_46"
+Merlin	merlin	exon	42224	43951	.	-	.	transcript_id "Merlin_46_mRNA"; gene_id "Merlin_46";
+Merlin	merlin	transcript	43951	44526	.	-	.	transcript_id "Merlin_47_exon"; gene_id "Merlin_47_exon"
+Merlin	merlin	CDS	43951	44526	.	-	0	transcript_id "Merlin_47_exon";
+Merlin	merlin	transcript	43951	44526	.	-	.	transcript_id "Merlin_47_mRNA"; gene_id "Merlin_47"
+Merlin	merlin	exon	43951	44526	.	-	.	transcript_id "Merlin_47_mRNA"; gene_id "Merlin_47";
+Merlin	merlin	transcript	44576	45025	.	+	.	transcript_id "Merlin_48_exon"; gene_id "Merlin_48_exon"
+Merlin	merlin	CDS	44576	45025	.	+	0	transcript_id "Merlin_48_exon";
+Merlin	merlin	transcript	44576	45025	.	+	.	transcript_id "Merlin_48_mRNA"; gene_id "Merlin_48"
+Merlin	merlin	exon	44576	45025	.	+	.	transcript_id "Merlin_48_mRNA"; gene_id "Merlin_48";
+Merlin	merlin	transcript	45025	45855	.	+	.	transcript_id "Merlin_49_exon"; gene_id "Merlin_49_exon"
+Merlin	merlin	CDS	45025	45855	.	+	0	transcript_id "Merlin_49_exon";
+Merlin	merlin	transcript	45025	45855	.	+	.	transcript_id "Merlin_49_mRNA"; gene_id "Merlin_49"
+Merlin	merlin	exon	45025	45855	.	+	.	transcript_id "Merlin_49_mRNA"; gene_id "Merlin_49";
+Merlin	merlin	transcript	45940	46527	.	+	.	transcript_id "Merlin_50_exon"; gene_id "Merlin_50_exon"
+Merlin	merlin	CDS	45940	46527	.	+	0	transcript_id "Merlin_50_exon";
+Merlin	merlin	transcript	45940	46527	.	+	.	transcript_id "Merlin_50_mRNA"; gene_id "Merlin_50"
+Merlin	merlin	exon	45940	46527	.	+	.	transcript_id "Merlin_50_mRNA"; gene_id "Merlin_50";
+Merlin	merlin	transcript	46527	47255	.	+	.	transcript_id "Merlin_51_exon"; gene_id "Merlin_51_exon"
+Merlin	merlin	CDS	46527	47255	.	+	0	transcript_id "Merlin_51_exon";
+Merlin	merlin	transcript	46527	47255	.	+	.	transcript_id "Merlin_51_mRNA"; gene_id "Merlin_51"
+Merlin	merlin	exon	46527	47255	.	+	.	transcript_id "Merlin_51_mRNA"; gene_id "Merlin_51";
+Merlin	merlin	transcript	47252	47485	.	+	.	transcript_id "Merlin_52_exon"; gene_id "Merlin_52_exon"
+Merlin	merlin	CDS	47252	47485	.	+	0	transcript_id "Merlin_52_exon";
+Merlin	merlin	transcript	47252	47485	.	+	.	transcript_id "Merlin_52_mRNA"; gene_id "Merlin_52"
+Merlin	merlin	exon	47252	47485	.	+	.	transcript_id "Merlin_52_mRNA"; gene_id "Merlin_52";
+Merlin	merlin	transcript	47485	47940	.	+	.	transcript_id "Merlin_53_exon"; gene_id "Merlin_53_exon"
+Merlin	merlin	CDS	47485	47940	.	+	0	transcript_id "Merlin_53_exon";
+Merlin	merlin	transcript	47485	47940	.	+	.	transcript_id "Merlin_53_mRNA"; gene_id "Merlin_53"
+Merlin	merlin	exon	47485	47940	.	+	.	transcript_id "Merlin_53_mRNA"; gene_id "Merlin_53";
+Merlin	merlin	transcript	47937	48143	.	+	.	transcript_id "Merlin_54_exon"; gene_id "Merlin_54_exon"
+Merlin	merlin	CDS	47937	48143	.	+	0	transcript_id "Merlin_54_exon";
+Merlin	merlin	transcript	47937	48143	.	+	.	transcript_id "Merlin_54_mRNA"; gene_id "Merlin_54"
+Merlin	merlin	exon	47937	48143	.	+	.	transcript_id "Merlin_54_mRNA"; gene_id "Merlin_54";
+Merlin	merlin	transcript	48140	48358	.	+	.	transcript_id "Merlin_55_exon"; gene_id "Merlin_55_exon"
+Merlin	merlin	CDS	48140	48358	.	+	0	transcript_id "Merlin_55_exon";
+Merlin	merlin	transcript	48140	48358	.	+	.	transcript_id "Merlin_55_mRNA"; gene_id "Merlin_55"
+Merlin	merlin	exon	48140	48358	.	+	.	transcript_id "Merlin_55_mRNA"; gene_id "Merlin_55";
+Merlin	merlin	transcript	48418	48600	.	+	.	transcript_id "Merlin_56_exon"; gene_id "Merlin_56_exon"
+Merlin	merlin	CDS	48418	48600	.	+	0	transcript_id "Merlin_56_exon";
+Merlin	merlin	transcript	48418	48600	.	+	.	transcript_id "Merlin_56_mRNA"; gene_id "Merlin_56"
+Merlin	merlin	exon	48418	48600	.	+	.	transcript_id "Merlin_56_mRNA"; gene_id "Merlin_56";
+Merlin	merlin	transcript	48584	48769	.	+	.	transcript_id "Merlin_57_exon"; gene_id "Merlin_57_exon"
+Merlin	merlin	CDS	48584	48769	.	+	0	transcript_id "Merlin_57_exon";
+Merlin	merlin	transcript	48584	48769	.	+	.	transcript_id "Merlin_57_mRNA"; gene_id "Merlin_57"
+Merlin	merlin	exon	48584	48769	.	+	.	transcript_id "Merlin_57_mRNA"; gene_id "Merlin_57";
+Merlin	merlin	transcript	48826	49053	.	+	.	transcript_id "Merlin_58_exon"; gene_id "Merlin_58_exon"
+Merlin	merlin	CDS	48826	49053	.	+	0	transcript_id "Merlin_58_exon";
+Merlin	merlin	transcript	48826	49053	.	+	.	transcript_id "Merlin_58_mRNA"; gene_id "Merlin_58"
+Merlin	merlin	exon	48826	49053	.	+	.	transcript_id "Merlin_58_mRNA"; gene_id "Merlin_58";
+Merlin	merlin	transcript	49076	49432	.	+	.	transcript_id "Merlin_59_exon"; gene_id "Merlin_59_exon"
+Merlin	merlin	CDS	49076	49432	.	+	0	transcript_id "Merlin_59_exon";
+Merlin	merlin	transcript	49076	49432	.	+	.	transcript_id "Merlin_59_mRNA"; gene_id "Merlin_59"
+Merlin	merlin	exon	49076	49432	.	+	.	transcript_id "Merlin_59_mRNA"; gene_id "Merlin_59";
+Merlin	merlin	transcript	49844	50110	.	+	.	transcript_id "Merlin_60_exon"; gene_id "Merlin_60_exon"
+Merlin	merlin	CDS	49844	50110	.	+	0	transcript_id "Merlin_60_exon";
+Merlin	merlin	transcript	49844	50110	.	+	.	transcript_id "Merlin_60_mRNA"; gene_id "Merlin_60"
+Merlin	merlin	exon	49844	50110	.	+	.	transcript_id "Merlin_60_mRNA"; gene_id "Merlin_60";
+Merlin	merlin	transcript	50983	51234	.	+	.	transcript_id "Merlin_61_exon"; gene_id "Merlin_61_exon"
+Merlin	merlin	CDS	50983	51234	.	+	0	transcript_id "Merlin_61_exon";
+Merlin	merlin	transcript	50983	51234	.	+	.	transcript_id "Merlin_61_mRNA"; gene_id "Merlin_61"
+Merlin	merlin	exon	50983	51234	.	+	.	transcript_id "Merlin_61_mRNA"; gene_id "Merlin_61";
+Merlin	merlin	transcript	51596	51838	.	+	.	transcript_id "Merlin_62_exon"; gene_id "Merlin_62_exon"
+Merlin	merlin	CDS	51596	51838	.	+	0	transcript_id "Merlin_62_exon";
+Merlin	merlin	transcript	51596	51838	.	+	.	transcript_id "Merlin_62_mRNA"; gene_id "Merlin_62"
+Merlin	merlin	exon	51596	51838	.	+	.	transcript_id "Merlin_62_mRNA"; gene_id "Merlin_62";
+Merlin	merlin	transcript	51835	52182	.	+	.	transcript_id "Merlin_63_exon"; gene_id "Merlin_63_exon"
+Merlin	merlin	CDS	51835	52182	.	+	0	transcript_id "Merlin_63_exon";
+Merlin	merlin	transcript	51835	52182	.	+	.	transcript_id "Merlin_63_mRNA"; gene_id "Merlin_63"
+Merlin	merlin	exon	51835	52182	.	+	.	transcript_id "Merlin_63_mRNA"; gene_id "Merlin_63";
+Merlin	merlin	transcript	52175	52684	.	+	.	transcript_id "Merlin_64_exon"; gene_id "Merlin_64_exon"
+Merlin	merlin	CDS	52175	52684	.	+	0	transcript_id "Merlin_64_exon";
+Merlin	merlin	transcript	52175	52684	.	+	.	transcript_id "Merlin_64_mRNA"; gene_id "Merlin_64"
+Merlin	merlin	exon	52175	52684	.	+	.	transcript_id "Merlin_64_mRNA"; gene_id "Merlin_64";
+Merlin	merlin	transcript	52681	52827	.	+	.	transcript_id "Merlin_65_exon"; gene_id "Merlin_65_exon"
+Merlin	merlin	CDS	52681	52827	.	+	0	transcript_id "Merlin_65_exon";
+Merlin	merlin	transcript	52681	52827	.	+	.	transcript_id "Merlin_65_mRNA"; gene_id "Merlin_65"
+Merlin	merlin	exon	52681	52827	.	+	.	transcript_id "Merlin_65_mRNA"; gene_id "Merlin_65";
+Merlin	merlin	transcript	52806	53030	.	+	.	transcript_id "Merlin_66_exon"; gene_id "Merlin_66_exon"
+Merlin	merlin	CDS	52806	53030	.	+	0	transcript_id "Merlin_66_exon";
+Merlin	merlin	transcript	52806	53030	.	+	.	transcript_id "Merlin_66_mRNA"; gene_id "Merlin_66"
+Merlin	merlin	exon	52806	53030	.	+	.	transcript_id "Merlin_66_mRNA"; gene_id "Merlin_66";
+Merlin	merlin	transcript	53032	53475	.	+	.	transcript_id "Merlin_67_exon"; gene_id "Merlin_67_exon"
+Merlin	merlin	CDS	53032	53475	.	+	0	transcript_id "Merlin_67_exon";
+Merlin	merlin	transcript	53032	53475	.	+	.	transcript_id "Merlin_67_mRNA"; gene_id "Merlin_67"
+Merlin	merlin	exon	53032	53475	.	+	.	transcript_id "Merlin_67_mRNA"; gene_id "Merlin_67";
+Merlin	merlin	transcript	53647	54225	.	+	.	transcript_id "Merlin_68_exon"; gene_id "Merlin_68_exon"
+Merlin	merlin	CDS	53647	54225	.	+	0	transcript_id "Merlin_68_exon";
+Merlin	merlin	transcript	53647	54225	.	+	.	transcript_id "Merlin_68_mRNA"; gene_id "Merlin_68"
+Merlin	merlin	exon	53647	54225	.	+	.	transcript_id "Merlin_68_mRNA"; gene_id "Merlin_68";
+Merlin	merlin	transcript	54316	54516	.	+	.	transcript_id "Merlin_69_exon"; gene_id "Merlin_69_exon"
+Merlin	merlin	CDS	54316	54516	.	+	0	transcript_id "Merlin_69_exon";
+Merlin	merlin	transcript	54316	54516	.	+	.	transcript_id "Merlin_69_mRNA"; gene_id "Merlin_69"
+Merlin	merlin	exon	54316	54516	.	+	.	transcript_id "Merlin_69_mRNA"; gene_id "Merlin_69";
+Merlin	merlin	transcript	54569	55168	.	+	.	transcript_id "Merlin_70_exon"; gene_id "Merlin_70_exon"
+Merlin	merlin	CDS	54569	55168	.	+	0	transcript_id "Merlin_70_exon";
+Merlin	merlin	transcript	54569	55168	.	+	.	transcript_id "Merlin_70_mRNA"; gene_id "Merlin_70"
+Merlin	merlin	exon	54569	55168	.	+	.	transcript_id "Merlin_70_mRNA"; gene_id "Merlin_70";
+Merlin	merlin	transcript	55216	55860	.	+	.	transcript_id "Merlin_71_exon"; gene_id "Merlin_71_exon"
+Merlin	merlin	CDS	55216	55860	.	+	0	transcript_id "Merlin_71_exon";
+Merlin	merlin	transcript	55216	55860	.	+	.	transcript_id "Merlin_71_mRNA"; gene_id "Merlin_71"
+Merlin	merlin	exon	55216	55860	.	+	.	transcript_id "Merlin_71_mRNA"; gene_id "Merlin_71";
+Merlin	merlin	transcript	55857	56279	.	+	.	transcript_id "Merlin_72_exon"; gene_id "Merlin_72_exon"
+Merlin	merlin	CDS	55857	56279	.	+	0	transcript_id "Merlin_72_exon";
+Merlin	merlin	transcript	55857	56279	.	+	.	transcript_id "Merlin_72_mRNA"; gene_id "Merlin_72"
+Merlin	merlin	exon	55857	56279	.	+	.	transcript_id "Merlin_72_mRNA"; gene_id "Merlin_72";
+Merlin	merlin	transcript	56276	56644	.	+	.	transcript_id "Merlin_73_exon"; gene_id "Merlin_73_exon"
+Merlin	merlin	CDS	56276	56644	.	+	0	transcript_id "Merlin_73_exon";
+Merlin	merlin	transcript	56276	56644	.	+	.	transcript_id "Merlin_73_mRNA"; gene_id "Merlin_73"
+Merlin	merlin	exon	56276	56644	.	+	.	transcript_id "Merlin_73_mRNA"; gene_id "Merlin_73";
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/01_all_tracks/config.json
--- a/test-data/out/01_all_tracks/config.json	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/01_all_tracks/config.json	Fri Oct 24 07:50:40 2025 +0000
@@ -55,18 +55,19 @@
           "assembly": "merlin.fa",
           "loc": "Merlin",
           "tracks": [
-            "6843cfc92b274808c8baa5a15cab5855_0_0",
-            "902614424ab2f62ce4edd6a978b2a71f_1_0",
-            "6b7dbed6d89698464c37243cb7a711de_1_1",
-            "793abf2f5fb78801c2863e040ad7c658_2_0",
-            "d9f3b09a4719c3b0b6cca3f73de6f425_3_0",
-            "c48d88e425802c8d168ec01575c6c43a_4_0",
-            "08ddbbfb7c03c6b254db206a6415cc2a_5_0",
-            "96b0beda20fb7fb90960ad5024a7a97a_5_1",
-            "7dffd3bd033fc065c4a413aa9bfa4899_6_0",
-            "7381e3e08a3fe229fa516fc0abf20950_7_0",
-            "0448d8682eef9e71183fbc9b84962afa_8_0",
-            "936a5285fbedf1c37f5daf26837035b2_9_0"
+            "a7e8fe627b3e52b4c1f8c3c886aa9e57_0_0",
+            "da7c1329ab838dfaeee1703c013a5bc0_1_0",
+            "f2b6c4173397b6b812014c2b32e822a1_2_0",
+            "dd9f9b6093c48d07509eee6176e1bb1a_2_1",
+            "c488f0dd81de5234363870aac1b6099e_3_0",
+            "48ffd6161c7eec8f82482fb614f08d13_4_0",
+            "8f850b3775e54706acf8e3ae3856c21e_5_0",
+            "f04ae7e29a15ee551a3d5cb1b7df6d9f_6_0",
+            "69acdc3612406c3cb0347062091c4228_6_1",
+            "780b1598e6368efa353cc705c9d08ab3_7_0",
+            "f329aa022d2aa8aea5316bfa9c7cc113_8_0",
+            "74b81aa00dec3d38a9ac2a1176c3cc7e_9_0",
+            "936a5285fbedf1c37f5daf26837035b2_10_0"
           ]
         }
       }
@@ -75,17 +76,17 @@
   "tracks": [
     {
       "type": "FeatureTrack",
-      "trackId": "6843cfc92b274808c8baa5a15cab5855_0_0",
+      "trackId": "a7e8fe627b3e52b4c1f8c3c886aa9e57_0_0",
       "name": "merlin.gff",
       "adapter": {
         "type": "Gff3TabixAdapter",
         "gffGzLocation": {
-          "uri": "data/6843cfc92b274808c8baa5a15cab5855_0_0.gff.gz",
+          "uri": "data/a7e8fe627b3e52b4c1f8c3c886aa9e57_0_0.gff.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/6843cfc92b274808c8baa5a15cab5855_0_0.gff.gz.tbi",
+            "uri": "data/a7e8fe627b3e52b4c1f8c3c886aa9e57_0_0.gff.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -100,7 +101,66 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "6843cfc92b274808c8baa5a15cab5855_0_0_LinearBasicDisplay",
+          "displayId": "a7e8fe627b3e52b4c1f8c3c886aa9e57_0_0_LinearBasicDisplay",
+          "renderer": {
+            "type": "SvgFeatureRenderer",
+            "showLabels": true,
+            "showDescriptions": true,
+            "labels": {
+              "name": "jexl:get(feature,'name') || get(feature,'id')",
+              "description": "jexl:get(feature,'note') || get(feature,'description')"
+            },
+            "displayMode": "normal",
+            "maxHeight": 600
+          }
+        }
+      ],
+      "formatDetails": {
+        "depth": 1
+      },
+      "metadata": {
+        "dataset_id": "2a23db38ccbbc7de",
+        "dataset_hid": "2",
+        "dataset_size": "110.3 KB",
+        "dataset_edam_format": "gff3",
+        "dataset_file_ext": "gff3",
+        "history_id": "4d30d636fed0a9f6",
+        "history_user_email": "planemo@galaxyproject.org",
+        "history_user_id": "1",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
+        "metadata_dbkey": "?",
+        "metadata_data_lines": "1228",
+        "metadata_comment_lines": "2",
+        "metadata_columns": "9",
+        "metadata_column_names": "[]",
+        "metadata_delimiter": "\t",
+        "metadata_attributes": "4",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
+      }
+    },
+    {
+      "type": "FeatureTrack",
+      "trackId": "da7c1329ab838dfaeee1703c013a5bc0_1_0",
+      "name": "merlin.gtf",
+      "adapter": {
+        "type": "GtfAdapter",
+        "gtfLocation": {
+          "uri": "data/da7c1329ab838dfaeee1703c013a5bc0_1_0.gtf",
+          "locationType": "UriLocation"
+        }
+      },
+      "category": [
+        "Default"
+      ],
+      "assemblyNames": [
+        "merlin.fa"
+      ],
+      "displays": [
+        {
+          "type": "LinearBasicDisplay",
+          "displayId": "da7c1329ab838dfaeee1703c013a5bc0_1_0_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -118,40 +178,40 @@
         "depth": 1
       },
       "metadata": {
-        "dataset_id": "33b9ecfea4207697",
-        "dataset_hid": "2",
-        "dataset_size": "110.3 KB",
-        "dataset_edam_format": "gff3",
-        "dataset_file_ext": "gff3",
-        "history_id": "ffb0709d52bfbdea",
+        "dataset_id": "0b7812b25f4cfb76",
+        "dataset_hid": "3",
+        "dataset_size": "25.0 KB",
+        "dataset_edam_format": "gtf",
+        "dataset_file_ext": "gtf",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
-        "metadata_data_lines": "1228",
-        "metadata_comment_lines": "2",
+        "metadata_data_lines": "292",
+        "metadata_comment_lines": "0",
         "metadata_columns": "9",
         "metadata_column_names": "[]",
-        "metadata_delimiter": "__tc__",
-        "metadata_attributes": "4",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_delimiter": "\t",
+        "metadata_attributes": "2",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "FeatureTrack",
-      "trackId": "902614424ab2f62ce4edd6a978b2a71f_1_0",
+      "trackId": "f2b6c4173397b6b812014c2b32e822a1_2_0",
       "name": "test-3.bed",
       "adapter": {
         "type": "BedTabixAdapter",
         "bedGzLocation": {
-          "uri": "data/902614424ab2f62ce4edd6a978b2a71f_1_0.bed.gz",
+          "uri": "data/f2b6c4173397b6b812014c2b32e822a1_2_0.bed.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/902614424ab2f62ce4edd6a978b2a71f_1_0.bed.gz.tbi",
+            "uri": "data/f2b6c4173397b6b812014c2b32e822a1_2_0.bed.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -166,7 +226,7 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "902614424ab2f62ce4edd6a978b2a71f_1_0_LinearBasicDisplay",
+          "displayId": "f2b6c4173397b6b812014c2b32e822a1_2_0_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -184,44 +244,45 @@
         "depth": 1
       },
       "metadata": {
-        "dataset_id": "dad64ae4d71c7372",
-        "dataset_hid": "3",
+        "dataset_id": "bd91a97d652fafe1",
+        "dataset_hid": "4",
         "dataset_size": "49 bytes",
         "dataset_edam_format": "bed",
         "dataset_file_ext": "bed",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_data_lines": "3",
         "metadata_comment_lines": "0",
         "metadata_columns": "3",
         "metadata_column_names": "[]",
-        "metadata_delimiter": "__tc__",
+        "metadata_delimiter": "\t",
         "metadata_chromCol": "1",
         "metadata_startCol": "2",
         "metadata_endCol": "3",
         "metadata_strandCol": "0",
-        "metadata_viz_filter_cols": "[4]",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_nameCol": "0",
+        "metadata_viz_filter_cols": "4",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "FeatureTrack",
-      "trackId": "6b7dbed6d89698464c37243cb7a711de_1_1",
+      "trackId": "dd9f9b6093c48d07509eee6176e1bb1a_2_1",
       "name": "test-6.bed",
       "adapter": {
         "type": "BedTabixAdapter",
         "bedGzLocation": {
-          "uri": "data/6b7dbed6d89698464c37243cb7a711de_1_1.bed.gz",
+          "uri": "data/dd9f9b6093c48d07509eee6176e1bb1a_2_1.bed.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/6b7dbed6d89698464c37243cb7a711de_1_1.bed.gz.tbi",
+            "uri": "data/dd9f9b6093c48d07509eee6176e1bb1a_2_1.bed.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -236,7 +297,7 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "6b7dbed6d89698464c37243cb7a711de_1_1_LinearBasicDisplay",
+          "displayId": "dd9f9b6093c48d07509eee6176e1bb1a_2_1_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -254,44 +315,45 @@
         "depth": 1
       },
       "metadata": {
-        "dataset_id": "36cc4ad69bb5f2a1",
-        "dataset_hid": "4",
+        "dataset_id": "3aa468ce9e79eed2",
+        "dataset_hid": "5",
         "dataset_size": "180 bytes",
         "dataset_edam_format": "bed",
         "dataset_file_ext": "bed",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_data_lines": "3",
         "metadata_comment_lines": "0",
         "metadata_columns": "6",
         "metadata_column_names": "[]",
-        "metadata_delimiter": "__tc__",
+        "metadata_delimiter": "\t",
         "metadata_chromCol": "1",
         "metadata_startCol": "2",
         "metadata_endCol": "3",
         "metadata_strandCol": "6",
-        "metadata_viz_filter_cols": "[4]",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_nameCol": "4",
+        "metadata_viz_filter_cols": "4",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "AlignmentsTrack",
-      "trackId": "793abf2f5fb78801c2863e040ad7c658_2_0",
+      "trackId": "c488f0dd81de5234363870aac1b6099e_3_0",
       "name": "merlin-sample.bam",
       "adapter": {
         "type": "BamAdapter",
         "bamLocation": {
-          "uri": "data/793abf2f5fb78801c2863e040ad7c658_2_0.bam",
+          "uri": "data/c488f0dd81de5234363870aac1b6099e_3_0.bam",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/793abf2f5fb78801c2863e040ad7c658_2_0.bam.bai",
+            "uri": "data/c488f0dd81de5234363870aac1b6099e_3_0.bam.bai",
             "locationType": "UriLocation"
           },
           "indexType": "BAI"
@@ -321,42 +383,41 @@
       "displays": [
         {
           "type": "LinearAlignmentsDisplay",
-          "displayId": "793abf2f5fb78801c2863e040ad7c658_2_0_LinearAlignmentsDisplay"
+          "displayId": "c488f0dd81de5234363870aac1b6099e_3_0_LinearAlignmentsDisplay"
         }
       ],
       "metadata": {
-        "dataset_id": "ea3d8239d386c6a4",
-        "dataset_hid": "5",
+        "dataset_id": "c8d274edba5d366b",
+        "dataset_hid": "6",
         "dataset_size": "12.9 KB",
         "dataset_edam_format": "bam",
         "dataset_file_ext": "bam",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_columns": "12",
-        "metadata_column_names": "[\"QNAME\", \"FLAG\", \"RNAME\", \"POS\", \"MAPQ\", \"CIGAR\", \"MRNM\", \"MPOS\", \"ISIZE\", \"SEQ\", \"QUAL\", \"OPT\"]",
+        "metadata_column_names": "['QNAME', 'FLAG', 'RNAME', 'POS', 'MAPQ', 'CIGAR', 'MRNM', 'MPOS', 'ISIZE', 'SEQ', 'QUAL', 'OPT']",
         "metadata_bam_version": "1.3",
         "metadata_sort_order": "coordinate",
         "metadata_read_groups": "[]",
-        "metadata_reference_names": "[\"Merlin\"]",
+        "metadata_reference_names": "['Merlin']",
         "metadata_reference_lengths": "[172788]",
-        "metadata_bam_header": "{\"HD\": {\"SO\": \"coordinate\", \"VN\": \"1.3\"}, \"PG\": [{\"CL\": \"minimap2 -a -x sr -t 1 reference.fa /net/datasrv3hs.sanbi.ac.za/datastore/cip0/software/galaxy/galaxy-ctb/galaxy/database/files/004/dataset_4697.dat\", \"ID\": \"minimap2\", \"PN\": \"minimap2\", \"VN\": \"2.5-r572\"}], \"SQ\": [{\"LN\": 172788, \"SN\": \"Merlin\"}]}",
-        "metadata_bam_index": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_bam_header": "{'HD': {'SO': 'coordinate', 'VN': '1.3'}, 'PG': [{'CL': 'minimap2 -a -x sr -t 1 reference.fa /net/datasrv3hs.sanbi.ac.za/datastore/cip0/software/galaxy/galaxy-ctb/galaxy/database/files/004/dataset_4697.dat', 'ID': 'minimap2', 'PN': 'minimap2', 'VN': '2.5-r572'}], 'SQ': [{'LN': 172788, 'SN': 'Merlin'}]}",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "QuantitativeTrack",
-      "trackId": "d9f3b09a4719c3b0b6cca3f73de6f425_3_0",
+      "trackId": "48ffd6161c7eec8f82482fb614f08d13_4_0",
       "name": "data.bw",
       "adapter": {
         "type": "BigWigAdapter",
         "bigWigLocation": {
-          "uri": "data/d9f3b09a4719c3b0b6cca3f73de6f425_3_0.bw",
+          "uri": "data/48ffd6161c7eec8f82482fb614f08d13_4_0.bw",
           "locationType": "UriLocation"
         }
       },
@@ -369,38 +430,38 @@
       "displays": [
         {
           "type": "LinearWiggleDisplay",
-          "displayId": "d9f3b09a4719c3b0b6cca3f73de6f425_3_0_LinearWiggleDisplay",
+          "displayId": "48ffd6161c7eec8f82482fb614f08d13_4_0_LinearWiggleDisplay",
           "defaultRendering": "xyplot"
         }
       ],
       "metadata": {
-        "dataset_id": "d753b8dba6e25d09",
-        "dataset_hid": "8",
+        "dataset_id": "2f8b42de958784ae",
+        "dataset_hid": "7",
         "dataset_size": "81.6 KB",
         "dataset_edam_format": "bigwig",
         "dataset_file_ext": "bigwig",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "AlignmentsTrack",
-      "trackId": "c48d88e425802c8d168ec01575c6c43a_4_0",
+      "trackId": "8f850b3775e54706acf8e3ae3856c21e_5_0",
       "name": "merlin-sample.cram",
       "adapter": {
         "type": "CramAdapter",
         "cramLocation": {
-          "uri": "data/c48d88e425802c8d168ec01575c6c43a_4_0.cram",
+          "uri": "data/8f850b3775e54706acf8e3ae3856c21e_5_0.cram",
           "locationType": "UriLocation"
         },
         "craiLocation": {
-          "uri": "data/c48d88e425802c8d168ec01575c6c43a_4_0.cram.crai",
+          "uri": "data/8f850b3775e54706acf8e3ae3856c21e_5_0.cram.crai",
           "locationType": "UriLocation"
         },
         "sequenceAdapter": {
@@ -428,35 +489,34 @@
       "displays": [
         {
           "type": "LinearAlignmentsDisplay",
-          "displayId": "c48d88e425802c8d168ec01575c6c43a_4_0_LinearAlignmentsDisplay"
+          "displayId": "8f850b3775e54706acf8e3ae3856c21e_5_0_LinearAlignmentsDisplay"
         }
       ],
       "metadata": {
-        "dataset_id": "1f72eafab720ae62",
-        "dataset_hid": "7",
+        "dataset_id": "76ca3a0a3de24f95",
+        "dataset_hid": "8",
         "dataset_size": "8.3 KB",
         "dataset_edam_format": "cram",
         "dataset_file_ext": "cram",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_cram_version": "3.0",
-        "metadata_cram_index": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "QuantitativeTrack",
-      "trackId": "08ddbbfb7c03c6b254db206a6415cc2a_5_0",
+      "trackId": "f04ae7e29a15ee551a3d5cb1b7df6d9f_6_0",
       "name": "data.bw",
       "adapter": {
         "type": "BigWigAdapter",
         "bigWigLocation": {
-          "uri": "data/08ddbbfb7c03c6b254db206a6415cc2a_5_0.bw",
+          "uri": "data/f04ae7e29a15ee551a3d5cb1b7df6d9f_6_0.bw",
           "locationType": "UriLocation"
         }
       },
@@ -469,34 +529,34 @@
       "displays": [
         {
           "type": "LinearWiggleDisplay",
-          "displayId": "08ddbbfb7c03c6b254db206a6415cc2a_5_0_LinearWiggleDisplay",
+          "displayId": "f04ae7e29a15ee551a3d5cb1b7df6d9f_6_0_LinearWiggleDisplay",
           "defaultRendering": "xyplot"
         }
       ],
       "metadata": {
-        "dataset_id": "d753b8dba6e25d09",
-        "dataset_hid": "8",
+        "dataset_id": "2f8b42de958784ae",
+        "dataset_hid": "7",
         "dataset_size": "81.6 KB",
         "dataset_edam_format": "bigwig",
         "dataset_file_ext": "bigwig",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "QuantitativeTrack",
-      "trackId": "96b0beda20fb7fb90960ad5024a7a97a_5_1",
+      "trackId": "69acdc3612406c3cb0347062091c4228_6_1",
       "name": "smaller2.bw",
       "adapter": {
         "type": "BigWigAdapter",
         "bigWigLocation": {
-          "uri": "data/96b0beda20fb7fb90960ad5024a7a97a_5_1.bw",
+          "uri": "data/69acdc3612406c3cb0347062091c4228_6_1.bw",
           "locationType": "UriLocation"
         }
       },
@@ -509,39 +569,39 @@
       "displays": [
         {
           "type": "LinearWiggleDisplay",
-          "displayId": "96b0beda20fb7fb90960ad5024a7a97a_5_1_LinearWiggleDisplay",
+          "displayId": "69acdc3612406c3cb0347062091c4228_6_1_LinearWiggleDisplay",
           "defaultRendering": "xyplot"
         }
       ],
       "metadata": {
-        "dataset_id": "ee963fc82e556fe8",
+        "dataset_id": "fff5871153f6d061",
         "dataset_hid": "9",
         "dataset_size": "10.9 KB",
         "dataset_edam_format": "bigwig",
         "dataset_file_ext": "bigwig",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "VariantTrack",
-      "trackId": "7dffd3bd033fc065c4a413aa9bfa4899_6_0",
+      "trackId": "780b1598e6368efa353cc705c9d08ab3_7_0",
       "name": "test.vcf",
       "adapter": {
         "type": "VcfTabixAdapter",
         "vcfGzLocation": {
-          "uri": "data/7dffd3bd033fc065c4a413aa9bfa4899_6_0.vcf.gz",
+          "uri": "data/780b1598e6368efa353cc705c9d08ab3_7_0.vcf.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/7dffd3bd033fc065c4a413aa9bfa4899_6_0.vcf.gz.tbi",
+            "uri": "data/780b1598e6368efa353cc705c9d08ab3_7_0.vcf.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -556,41 +616,41 @@
       "displays": [
         {
           "type": "LinearVariantDisplay",
-          "displayId": "7dffd3bd033fc065c4a413aa9bfa4899_6_0_LinearVariantDisplay"
+          "displayId": "780b1598e6368efa353cc705c9d08ab3_7_0_LinearVariantDisplay"
         }
       ],
       "formatDetails": {},
       "metadata": {
-        "dataset_id": "2a8101cbb778a3ae",
+        "dataset_id": "d68659e09db1368d",
         "dataset_hid": "10",
         "dataset_size": "1.5 KB",
         "dataset_edam_format": "vcf",
         "dataset_file_ext": "vcf",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_data_lines": "5",
         "metadata_comment_lines": "18",
         "metadata_columns": "12",
         "metadata_column_names": "[]",
-        "metadata_delimiter": "__tc__",
-        "metadata_viz_filter_cols": "[5]",
-        "metadata_sample_names": "[\"NA00001\", \"NA00002\", \"NA00003\"]",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_delimiter": "\t",
+        "metadata_viz_filter_cols": "5",
+        "metadata_sample_names": "['NA00001', 'NA00002', 'NA00003']",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "HicTrack",
-      "trackId": "7381e3e08a3fe229fa516fc0abf20950_7_0",
+      "trackId": "f329aa022d2aa8aea5316bfa9c7cc113_8_0",
       "name": "merlin.hic",
       "adapter": {
         "type": "HicAdapter",
         "hicLocation": {
-          "uri": "data/7381e3e08a3fe229fa516fc0abf20950_7_0.hic",
+          "uri": "data/f329aa022d2aa8aea5316bfa9c7cc113_8_0.hic",
           "locationType": "UriLocation"
         }
       },
@@ -603,29 +663,29 @@
       "displays": [
         {
           "type": "LinearHicDisplay",
-          "displayId": "7381e3e08a3fe229fa516fc0abf20950_7_0_LinearHicDisplay"
+          "displayId": "f329aa022d2aa8aea5316bfa9c7cc113_8_0_LinearHicDisplay"
         }
       ],
       "metadata": {
-        "dataset_id": "bc183b162fdbb361",
+        "dataset_id": "6294e1cb82136e37",
         "dataset_hid": "11",
         "dataset_size": "931 bytes",
         "dataset_edam_format": "hic",
         "dataset_file_ext": "hic",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_version": "9",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "MafTrack",
-      "trackId": "0448d8682eef9e71183fbc9b84962afa_8_0",
+      "trackId": "74b81aa00dec3d38a9ac2a1176c3cc7e_9_0",
       "name": "merlinlastz.maf",
       "adapter": {
         "type": "MafTabixAdapter",
@@ -639,11 +699,11 @@
           "Merlin6"
         ],
         "bedGzLocation": {
-          "uri": "data/0448d8682eef9e71183fbc9b84962afa_8_0.maf.gz"
+          "uri": "data/74b81aa00dec3d38a9ac2a1176c3cc7e_9_0.maf.gz"
         },
         "index": {
           "location": {
-            "uri": "data/0448d8682eef9e71183fbc9b84962afa_8_0.maf.gz.tbi"
+            "uri": "data/74b81aa00dec3d38a9ac2a1176c3cc7e_9_0.maf.gz.tbi"
           }
         }
       },
@@ -656,33 +716,31 @@
       "displays": [
         {
           "type": "LinearMafDisplay",
-          "displayId": "0448d8682eef9e71183fbc9b84962afa_8_0_LinearMafDisplay"
+          "displayId": "74b81aa00dec3d38a9ac2a1176c3cc7e_9_0_LinearMafDisplay"
         }
       ],
       "metadata": {
-        "dataset_id": "4a7d65b0c4d72bd3",
+        "dataset_id": "7217695b024bd3ec",
         "dataset_hid": "12",
         "dataset_size": "1.5 KB",
         "dataset_edam_format": "maf",
         "dataset_file_ext": "maf",
-        "history_id": "ffb0709d52bfbdea",
+        "history_id": "4d30d636fed0a9f6",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-0",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-0",
         "metadata_dbkey": "?",
         "metadata_data_lines": "0",
-        "metadata_species": "[\"Merlin\", \"Merlin1\", \"Merlin2\", \"Merlin3\", \"Merlin4\", \"Merlin5\", \"Merlin6\"]",
+        "metadata_species": "Merlin,Merlin1,Merlin2,Merlin3,Merlin4,Merlin5,Merlin6",
         "metadata_blocks": "6",
-        "metadata_species_chromosomes": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-        "metadata_maf_index": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "GCContentTrack",
-      "trackId": "936a5285fbedf1c37f5daf26837035b2_9_0",
+      "trackId": "936a5285fbedf1c37f5daf26837035b2_10_0",
       "name": "GC Content",
       "adapter": {
         "type": "BgzipFastaAdapter",
@@ -708,7 +766,7 @@
       "displays": [
         {
           "type": "LinearGCContentDisplay",
-          "displayId": "936a5285fbedf1c37f5daf26837035b2_9_0_LinearGCContentDisplay"
+          "displayId": "936a5285fbedf1c37f5daf26837035b2_10_0_LinearGCContentDisplay"
         }
       ]
     }
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/01_all_tracks/galaxy.xml
--- a/test-data/out/01_all_tracks/galaxy.xml	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/01_all_tracks/galaxy.xml	Fri Oct 24 07:50:40 2025 +0000
@@ -12,25 +12,25 @@
         http://localhost:8080
     
     
-            
+            
             
-                
-                
+                    display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-0"/>
                 
                 
             
             
@@ -40,28 +40,28 @@
 
 
                     
-                    
+                    
                         
-                        
-                        
+                            display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-0"/>
                         
                         
                         
                     
@@ -95,61 +95,118 @@
 
 
                     
-                    
+                    
                         
-                        
+                        
+                        
+                        
+                        
+                    
+                    
+
+            
+                
+
+                    
+                        1
+                    
+
+
+                    
+                    false
+                    
+            
+        
+        
         
     
-        
+        
 
 
                     
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/06_various_options/config.json
--- a/test-data/out/06_various_options/config.json	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/06_various_options/config.json	Fri Oct 24 07:50:40 2025 +0000
@@ -72,7 +72,7 @@
           "assembly": "merlin.fa",
           "loc": "Merlin:1000-2000",
           "tracks": [
-            "1d4288426ee65828142bd0ec1611ca5a_0_0"
+            "9164da821dd9f40efa61a737d8dbd031_0_0"
           ]
         }
       }
@@ -81,17 +81,17 @@
   "tracks": [
     {
       "type": "FeatureTrack",
-      "trackId": "1d4288426ee65828142bd0ec1611ca5a_0_0",
+      "trackId": "9164da821dd9f40efa61a737d8dbd031_0_0",
       "name": "merlin.gff",
       "adapter": {
         "type": "Gff3TabixAdapter",
         "gffGzLocation": {
-          "uri": "data/1d4288426ee65828142bd0ec1611ca5a_0_0.gff.gz",
+          "uri": "data/9164da821dd9f40efa61a737d8dbd031_0_0.gff.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/1d4288426ee65828142bd0ec1611ca5a_0_0.gff.gz.tbi",
+            "uri": "data/9164da821dd9f40efa61a737d8dbd031_0_0.gff.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -106,7 +106,7 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "1d4288426ee65828142bd0ec1611ca5a_0_0_LinearBasicDisplay",
+          "displayId": "9164da821dd9f40efa61a737d8dbd031_0_0_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -133,17 +133,17 @@
     },
     {
       "type": "FeatureTrack",
-      "trackId": "3ab3c20156596dd17db795bdda1f7c1a_1_0",
+      "trackId": "b26da96d1d07207823e585f65ca15149_1_0",
       "name": "1.gff",
       "adapter": {
         "type": "Gff3TabixAdapter",
         "gffGzLocation": {
-          "uri": "data/3ab3c20156596dd17db795bdda1f7c1a_1_0.gff.gz",
+          "uri": "data/b26da96d1d07207823e585f65ca15149_1_0.gff.gz",
           "locationType": "UriLocation"
         },
         "index": {
           "location": {
-            "uri": "data/3ab3c20156596dd17db795bdda1f7c1a_1_0.gff.gz.tbi",
+            "uri": "data/b26da96d1d07207823e585f65ca15149_1_0.gff.gz.tbi",
             "locationType": "UriLocation"
           },
           "indexType": "TBI"
@@ -158,7 +158,7 @@
       "displays": [
         {
           "type": "LinearArcDisplay",
-          "displayId": "3ab3c20156596dd17db795bdda1f7c1a_1_0_LinearArcDisplay",
+          "displayId": "b26da96d1d07207823e585f65ca15149_1_0_LinearArcDisplay",
           "renderer": {
             "type": "ArcRenderer",
             "label": "jexl:get(feature,'score')",
@@ -170,25 +170,25 @@
         "depth": 1
       },
       "metadata": {
-        "dataset_id": "f4d493e76c714bd7",
+        "dataset_id": "8d08779b916d2c74",
         "dataset_hid": "6",
         "dataset_size": "2.3 KB",
         "dataset_edam_format": "gff3",
         "dataset_file_ext": "gff3",
-        "history_id": "052ea72eccff1e52",
+        "history_id": "c8d274edba5d366b",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-5",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-5",
         "metadata_dbkey": "?",
         "metadata_data_lines": "27",
         "metadata_comment_lines": "19",
         "metadata_columns": "9",
         "metadata_column_names": "[]",
-        "metadata_delimiter": "__tc__",
+        "metadata_delimiter": "\t",
         "metadata_attributes": "6",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     }
   ],
@@ -214,4 +214,4 @@
       ]
     }
   ]
-}
+}
\ No newline at end of file
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/06_various_options/galaxy.xml
--- a/test-data/out/06_various_options/galaxy.xml	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/06_various_options/galaxy.xml	Fri Oct 24 07:50:40 2025 +0000
@@ -12,29 +12,29 @@
         http://localhost:8080
     
     
-            
+            
             
-                
-                
+                    display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-5"/>
                 
                 
             
-                
-                
+                
+                
             
         Merlin:1000..2000
     
@@ -42,9 +42,9 @@
 
 
                     
-                    
+                    
                         
-                            
+                            
                         
                     
                     
@@ -79,28 +79,28 @@
 
 
                     
-                    
+                    
                         
-                        
-                        
+                            display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-5"/>
                         
                         
                         
                     
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/07_synteny_mixed/config.json
--- a/test-data/out/07_synteny_mixed/config.json	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/07_synteny_mixed/config.json	Fri Oct 24 07:50:40 2025 +0000
@@ -102,8 +102,7 @@
               "assembly": "merlun.fa",
               "loc": "Merlun",
               "tracks": [
-                "17f324230d6997928e1eca50228bd09d_0_0",
-                "17f324230d6997928e1eca50228bd09d_1_0"
+                "f27027d9cba656ee7279114b4764a1a9_1_0"
               ]
             }
           },
@@ -113,8 +112,7 @@
               "assembly": "merlon.fa",
               "loc": "Merlon",
               "tracks": [
-                "33429c271bc47d6279b48d1eaaf4d1e8_0_0",
-                "33429c271bc47d6279b48d1eaaf4d1e8_1_0"
+                "9ab20cffedd38e60ca92f0454b9745db_1_0"
               ]
             }
           },
@@ -124,28 +122,63 @@
               "assembly": "merlin.fa",
               "loc": "Merlin",
               "tracks": [
-                "9353a848a5e1df8b38605dbc140d95dd_0_0"
+                "40c5d3cdfaa1318fd0d68918cd144f36_0_0"
               ]
             }
           }
         ],
-        "levels": []
+        "levels": [
+          {
+            "type": "LinearSyntenyViewHelper",
+            "tracks": [
+              {
+                "type": "SyntenyTrack",
+                "configuration": "f27027d9cba656ee7279114b4764a1a9_0_0",
+                "displays": [
+                  {
+                    "type": "LinearSyntenyDisplay",
+                    "configuration": "f27027d9cba656ee7279114b4764a1a9_0_0_LinearSyntenyDisplay"
+                  }
+                ]
+              }
+            ],
+            "height": 100,
+            "level": 0
+          },
+          {
+            "type": "LinearSyntenyViewHelper",
+            "tracks": [
+              {
+                "type": "SyntenyTrack",
+                "configuration": "9ab20cffedd38e60ca92f0454b9745db_0_0",
+                "displays": [
+                  {
+                    "type": "LinearSyntenyDisplay",
+                    "configuration": "9ab20cffedd38e60ca92f0454b9745db_0_0_LinearSyntenyDisplay"
+                  }
+                ]
+              }
+            ],
+            "height": 100,
+            "level": 1
+          }
+        ]
       }
     ]
   },
   "tracks": [
     {
       "type": "SyntenyTrack",
-      "trackId": "17f324230d6997928e1eca50228bd09d_0_0",
+      "trackId": "f27027d9cba656ee7279114b4764a1a9_1_0",
       "name": "merlun_on_merlon.paf",
       "adapter": {
         "type": "PairwiseIndexedPAFAdapter",
         "pifGzLocation": {
-          "uri": "data/17f324230d6997928e1eca50228bd09d_0_0.pif.gz"
+          "uri": "data/f27027d9cba656ee7279114b4764a1a9_1_0.pif.gz"
         },
         "index": {
           "location": {
-            "uri": "data/17f324230d6997928e1eca50228bd09d_0_0.pif.gz.tbi"
+            "uri": "data/f27027d9cba656ee7279114b4764a1a9_1_0.pif.gz.tbi"
           }
         }
       },
@@ -158,62 +191,7 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "17f324230d6997928e1eca50228bd09d_0_0_LinearBasicDisplay",
-          "renderer": {
-            "type": "SvgFeatureRenderer",
-            "showLabels": true,
-            "showDescriptions": true,
-            "labels": {
-              "name": "jexl:get(feature,'name') || get(feature,'id')",
-              "description": "jexl:get(feature,'note') || get(feature,'description')"
-            },
-            "displayMode": "normal",
-            "maxHeight": 1200
-          }
-        }
-      ],
-      "metadata": {
-        "dataset_id": "2ca7380062475cc2",
-        "dataset_hid": "2",
-        "dataset_size": "227 bytes",
-        "dataset_edam_format": "paf",
-        "dataset_file_ext": "paf",
-        "history_id": "fa950b0ef319061e",
-        "history_user_email": "planemo@galaxyproject.org",
-        "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-6",
-        "metadata_dbkey": "?",
-        "metadata_data_lines": "2",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
-      }
-    },
-    {
-      "type": "SyntenyTrack",
-      "trackId": "17f324230d6997928e1eca50228bd09d_1_0",
-      "name": "merlun_on_merlon.paf",
-      "adapter": {
-        "type": "PairwiseIndexedPAFAdapter",
-        "pifGzLocation": {
-          "uri": "data/17f324230d6997928e1eca50228bd09d_1_0.pif.gz"
-        },
-        "index": {
-          "location": {
-            "uri": "data/17f324230d6997928e1eca50228bd09d_1_0.pif.gz.tbi"
-          }
-        }
-      },
-      "category": [
-        "Default"
-      ],
-      "assemblyNames": [
-        "merlun.fa"
-      ],
-      "displays": [
-        {
-          "type": "LinearBasicDisplay",
-          "displayId": "17f324230d6997928e1eca50228bd09d_1_0_LinearBasicDisplay",
+          "displayId": "f27027d9cba656ee7279114b4764a1a9_1_0_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -228,34 +206,34 @@
         }
       ],
       "metadata": {
-        "dataset_id": "2ca7380062475cc2",
+        "dataset_id": "0193a46a40878ddb",
         "dataset_hid": "2",
         "dataset_size": "227 bytes",
         "dataset_edam_format": "paf",
         "dataset_file_ext": "paf",
-        "history_id": "fa950b0ef319061e",
+        "history_id": "2f8b42de958784ae",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-6",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-6",
         "metadata_dbkey": "?",
         "metadata_data_lines": "2",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "SyntenyTrack",
-      "trackId": "33429c271bc47d6279b48d1eaaf4d1e8_0_0",
+      "trackId": "9ab20cffedd38e60ca92f0454b9745db_1_0",
       "name": "merlon_on_merlin.paf",
       "adapter": {
         "type": "PairwiseIndexedPAFAdapter",
         "pifGzLocation": {
-          "uri": "data/33429c271bc47d6279b48d1eaaf4d1e8_0_0.pif.gz"
+          "uri": "data/9ab20cffedd38e60ca92f0454b9745db_1_0.pif.gz"
         },
         "index": {
           "location": {
-            "uri": "data/33429c271bc47d6279b48d1eaaf4d1e8_0_0.pif.gz.tbi"
+            "uri": "data/9ab20cffedd38e60ca92f0454b9745db_1_0.pif.gz.tbi"
           }
         }
       },
@@ -268,7 +246,7 @@
       "displays": [
         {
           "type": "LinearBasicDisplay",
-          "displayId": "33429c271bc47d6279b48d1eaaf4d1e8_0_0_LinearBasicDisplay",
+          "displayId": "9ab20cffedd38e60ca92f0454b9745db_1_0_LinearBasicDisplay",
           "renderer": {
             "type": "SvgFeatureRenderer",
             "showLabels": true,
@@ -283,85 +261,30 @@
         }
       ],
       "metadata": {
-        "dataset_id": "6f8f1ec4766df755",
+        "dataset_id": "4b6ef6ca3df7dc79",
         "dataset_hid": "4",
         "dataset_size": "127 bytes",
         "dataset_edam_format": "paf",
         "dataset_file_ext": "paf",
-        "history_id": "fa950b0ef319061e",
+        "history_id": "2f8b42de958784ae",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-6",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-6",
         "metadata_dbkey": "?",
         "metadata_data_lines": "1",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
-      }
-    },
-    {
-      "type": "SyntenyTrack",
-      "trackId": "33429c271bc47d6279b48d1eaaf4d1e8_1_0",
-      "name": "merlon_on_merlin.paf",
-      "adapter": {
-        "type": "PairwiseIndexedPAFAdapter",
-        "pifGzLocation": {
-          "uri": "data/33429c271bc47d6279b48d1eaaf4d1e8_1_0.pif.gz"
-        },
-        "index": {
-          "location": {
-            "uri": "data/33429c271bc47d6279b48d1eaaf4d1e8_1_0.pif.gz.tbi"
-          }
-        }
-      },
-      "category": [
-        "Default"
-      ],
-      "assemblyNames": [
-        "merlon.fa"
-      ],
-      "displays": [
-        {
-          "type": "LinearBasicDisplay",
-          "displayId": "33429c271bc47d6279b48d1eaaf4d1e8_1_0_LinearBasicDisplay",
-          "renderer": {
-            "type": "SvgFeatureRenderer",
-            "showLabels": true,
-            "showDescriptions": true,
-            "labels": {
-              "name": "jexl:get(feature,'name') || get(feature,'id')",
-              "description": "jexl:get(feature,'note') || get(feature,'description')"
-            },
-            "displayMode": "normal",
-            "maxHeight": 1200
-          }
-        }
-      ],
-      "metadata": {
-        "dataset_id": "6f8f1ec4766df755",
-        "dataset_hid": "4",
-        "dataset_size": "127 bytes",
-        "dataset_edam_format": "paf",
-        "dataset_file_ext": "paf",
-        "history_id": "fa950b0ef319061e",
-        "history_user_email": "planemo@galaxyproject.org",
-        "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-6",
-        "metadata_dbkey": "?",
-        "metadata_data_lines": "1",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     },
     {
       "type": "QuantitativeTrack",
-      "trackId": "9353a848a5e1df8b38605dbc140d95dd_0_0",
+      "trackId": "40c5d3cdfaa1318fd0d68918cd144f36_0_0",
       "name": "data.bw",
       "adapter": {
         "type": "BigWigAdapter",
         "bigWigLocation": {
-          "uri": "data/9353a848a5e1df8b38605dbc140d95dd_0_0.bw",
+          "uri": "data/40c5d3cdfaa1318fd0d68918cd144f36_0_0.bw",
           "locationType": "UriLocation"
         }
       },
@@ -374,24 +297,122 @@
       "displays": [
         {
           "type": "LinearWiggleDisplay",
-          "displayId": "9353a848a5e1df8b38605dbc140d95dd_0_0_LinearWiggleDisplay",
+          "displayId": "40c5d3cdfaa1318fd0d68918cd144f36_0_0_LinearWiggleDisplay",
           "defaultRendering": "xyplot"
         }
       ],
       "metadata": {
-        "dataset_id": "9956239aff51cae9",
+        "dataset_id": "956e46a817a35762",
         "dataset_hid": "6",
         "dataset_size": "81.6 KB",
         "dataset_edam_format": "bigwig",
         "dataset_file_ext": "bigwig",
-        "history_id": "fa950b0ef319061e",
+        "history_id": "2f8b42de958784ae",
+        "history_user_email": "planemo@galaxyproject.org",
+        "history_user_id": "1",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-6",
+        "metadata_dbkey": "?",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
+      }
+    },
+    {
+      "type": "SyntenyTrack",
+      "trackId": "f27027d9cba656ee7279114b4764a1a9_0_0",
+      "name": "merlun_on_merlon.paf",
+      "adapter": {
+        "assemblyNames": [
+          "merlun.fa",
+          "merlon.fa"
+        ],
+        "type": "PairwiseIndexedPAFAdapter",
+        "pifGzLocation": {
+          "uri": "data/f27027d9cba656ee7279114b4764a1a9_0_0.pif.gz"
+        },
+        "index": {
+          "location": {
+            "uri": "data/f27027d9cba656ee7279114b4764a1a9_0_0.pif.gz.tbi"
+          }
+        }
+      },
+      "category": [
+        "Default"
+      ],
+      "assemblyNames": [
+        "merlun.fa",
+        "merlon.fa"
+      ],
+      "displays": [
+        {
+          "type": "LinearSyntenyDisplay",
+          "displayId": "f27027d9cba656ee7279114b4764a1a9_0_0_LinearSyntenyDisplay"
+        }
+      ],
+      "metadata": {
+        "dataset_id": "0193a46a40878ddb",
+        "dataset_hid": "2",
+        "dataset_size": "227 bytes",
+        "dataset_edam_format": "paf",
+        "dataset_file_ext": "paf",
+        "history_id": "2f8b42de958784ae",
         "history_user_email": "planemo@galaxyproject.org",
         "history_user_id": "1",
-        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy0-6",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-6",
         "metadata_dbkey": "?",
-        "tool_tool_id": "upload1",
-        "tool_tool_version": "1.1.7",
-        "tool_tool": "upload1"
+        "metadata_data_lines": "2",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
+      }
+    },
+    {
+      "type": "SyntenyTrack",
+      "trackId": "9ab20cffedd38e60ca92f0454b9745db_0_0",
+      "name": "merlon_on_merlin.paf",
+      "adapter": {
+        "assemblyNames": [
+          "merlon.fa",
+          "merlin.fa"
+        ],
+        "type": "PairwiseIndexedPAFAdapter",
+        "pifGzLocation": {
+          "uri": "data/9ab20cffedd38e60ca92f0454b9745db_0_0.pif.gz"
+        },
+        "index": {
+          "location": {
+            "uri": "data/9ab20cffedd38e60ca92f0454b9745db_0_0.pif.gz.tbi"
+          }
+        }
+      },
+      "category": [
+        "Default"
+      ],
+      "assemblyNames": [
+        "merlon.fa",
+        "merlin.fa"
+      ],
+      "displays": [
+        {
+          "type": "LinearSyntenyDisplay",
+          "displayId": "9ab20cffedd38e60ca92f0454b9745db_0_0_LinearSyntenyDisplay"
+        }
+      ],
+      "metadata": {
+        "dataset_id": "4b6ef6ca3df7dc79",
+        "dataset_hid": "4",
+        "dataset_size": "127 bytes",
+        "dataset_edam_format": "paf",
+        "dataset_file_ext": "paf",
+        "history_id": "2f8b42de958784ae",
+        "history_user_email": "planemo@galaxyproject.org",
+        "history_user_id": "1",
+        "history_display_name": "Tool Test History for jbrowse2/3.6.5+galaxy1-6",
+        "metadata_dbkey": "?",
+        "metadata_data_lines": "1",
+        "tool_tool_id": "__DATA_FETCH__",
+        "tool_tool_version": "0.1.0",
+        "tool_tool": "__DATA_FETCH__"
       }
     }
   ],
diff -r 93fdd696c281 -r e237edee9a53 test-data/out/07_synteny_mixed/galaxy.xml
--- a/test-data/out/07_synteny_mixed/galaxy.xml	Thu Oct 02 10:20:29 2025 +0000
+++ b/test-data/out/07_synteny_mixed/galaxy.xml	Fri Oct 24 07:50:40 2025 +0000
@@ -12,25 +12,25 @@
         http://localhost:8080
     
     
-            
+            
             
-                
-                
+                    display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-6"/>
                 
                 
             
             
@@ -40,23 +40,23 @@
 
 
                     
-                    
+                    
                         
-                        
-                        
+                            display_name="Tool Test History for jbrowse2/3.6.5+galaxy1-6"/>
                         
                         
                         
                     
@@ -64,7 +64,7 @@